Selenium Webdriver定位器

时间:2016-09-06 12:02:24

标签: javascript selenium xpath webdriver

我正在WebDriver自动执行报告提交流程,报告有多个页面,在所有页面中都会有Next按钮进入下一页。

下一个按钮有以下定位器,

<a class="buttonNext btn btn-green btnwidth" href="javascript:;" style="">Next</a>

问题是报告中的所有Next按钮都具有相同的定位器,因为向导包含下一个,上一个和提交按钮在整个报告中很常见,只有页面内容会发生变化,但此面板仍然是整个报告也一样。

我可以使用xpath按钮的Next

.//*[@id='wizard']/div[2]/a[3]

xpath对于报告中放置Next按钮的所有位置都相同。

我的编码如下: -

driver.findElement(By.xpath("//div[@id='wizard']/div[2]/a[3]")).click();
Thread.sleep(3000);

((JavascriptExecutor)driver).executeScript("scroll(0,2500)");
driver.findElement(By.xpath("//div[@id='wizard']/div[2]/a[3]")).click();
driver.findElement(By.xpath("//div[@id='wizard']/div[2]/a[3]")).click();

//WebDriverWait wait2 = new WebDriverWait(driver, 10);
//WebElement element2 = wait.until(ExpectedConditions.elementToBeClickable(By.partialLinkText("Next")));

 driver.findElement(By.id("SignatureDate")).click();
 driver.findElement(By.id("SignatureDate")).clear();
 driver.findElement(By.id("SignatureDate")).sendKeys("01/09/2016");

WebDriver正在识别第一个Next按钮xpath并点击它,但对于接下来的两个页面我再次提供xpath来访问{{1} }}按钮,但是selenium会将错误消息抛给我: -

  

ElementNotVisibleexception:元素不可见。

如何区分Next按钮以识别Next

注意:报告在WebDriver&amp;我在iframe工作。

2 个答案:

答案 0 :(得分:1)

您可以使用“显式等待”允许页面在尝试单击其他页面上的“下一步”按钮之前完全加载。 此外,如果使用iFrame,您可以使用以下内容:

wait.until(ExpectedConditions.frameToBeAvailableAndSwitchToIt("FRAME_NAME"));

答案 1 :(得分:1)

在从By.cssSele‌​ctor()切换回WebDriverWait之后,您应该尝试每次iframe使用defaulContent(),如下所示: -

//Do your stuff inside iframe

//Now switch back to default content
driver.switchTo().defaultContent();

new WebDriverWait(driver, 10).until(ExpectedConditions.elementToBeClickable(By.cssSele‌​ctor("a.buttonNext")‌​)).click()