1

I'm using driver.findElement(By.xpath("//a[@title='A K T İ V A S Y O N']")); to locate the element given below in the screenshots but getting Unable to find element error.

enter image description here enter image description here enter image description here enter image description here

There are nested classes and frames also. how can I use switch method for nested frames?

My last try is the following one; Screenshot's attached also.enter image description here

driver.findElement(By.xpath("//frameset[@id='fset1']//frame[@name='ax']//frame[@name='menu']//div[@id='vodaMenuDiv']//li[@id='CCBmain']//li[@id='ccbabone']//li[@id='ccbcquery']//a[@title='A K T İ V A S Y O N']")).click();

  • 1
    Check if the element is inside iframe – Alexey R. Apr 15 at 16:15
  • Try xpath using contains text- driver.findElement(By.xpath(".//a[contains(text(),'A K T İ V A S Y O N')]")); – Upkar Singh Apr 16 at 5:38
  • You can also try this may this work for you- driver.findElement(By.xpath(".//li[@id='ccbcquery']/a")); – Upkar Singh Apr 16 at 5:42
0

If you cannot find an element, you need to check if it is inside a frame (or iframe). A frameset is a way to split a window in multiple frames, which acts as a separate window. Selenium needs to switch to this frame first before you can find elements in it.

Your last image shows that the element is within multiple framesets and frames. As frames are not part of the page, but a sort of page on it own you first need to switch to the frame and then to frame within before you can find the element.

Check out some reads:

0

Use below alternatives to locate the element-

driver.findElement(By.xpath("//li[@id='ccbcquery']/a")).click();

equivalent css selector is

driver.findElement(By.cssSelector("li[id='ccbcquery']>a")).click();

OR

driver.findElement(By.cssSelector("li#ccbcquery>a")).click();

Pointed to be noted

  1. Make sure element is not in frame if yes then switch into respective frame using driver.switchTo().frame(frameid/element); and then perform action

  2. Use implicit/explicit wait to get element proper load and available in DOM

    driver.get("web_irl");
    driver.manage().timeouts().implicitlyWait(15, TimeUnit.SECONDS);
    

    Explicit Wait :

    new WebDriverWait(driver, 30).until(ExpectedConditions.visibilityOf(driver.findElement(By.cssSelector("li#ccbcquery>a")))).click();
    
  • It is about frames (not iframes), voting down to push better answers up. Feel free to edit (and tag me in a comment to vote up again) or delete your answer. – Niels van Reijmersdal Apr 19 at 13:51
  • @NielsvanReijmersdal, thanks for suggestion, I have updated the answer – NarendraR Apr 29 at 14:57
-1

In my experience the a tag is complicated to find straight forward just as you have tried:

driver.findElement(By.xpath("//a[@title='A K T İ V A S Y O N']"));

You should try using the wild card * something like this:

driver.findElement(By.xpath("//*[@title='A K T İ V A S Y O N']"));

Hope this helps!

  • It is about frames, voting down to push better answers up. Feel free to edit (and tag me in a comment to vote up again) or delete your answer. – Niels van Reijmersdal Apr 19 at 13:50

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.