我正在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
工作。
答案 0 :(得分:1)
您可以使用“显式等待”允许页面在尝试单击其他页面上的“下一步”按钮之前完全加载。 此外,如果使用iFrame,您可以使用以下内容:
wait.until(ExpectedConditions.frameToBeAvailableAndSwitchToIt("FRAME_NAME"));
答案 1 :(得分:1)
在从By.cssSelector()
切换回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.cssSelector("a.buttonNext"))).click()