我是Web自动化的新手,我想从一个简单的问题开始。
我正在使用Chrome中的Selenium Webdriver。我测试的每个页面上都有一个按钮:
<button class="next_btn btn green">Btn</button>
我第一次必须编写以下语法才能使其正常工作:
driver.findElement(By.xpath("//button[contains(.,'Btn')]")).click();
其他xpath无效。下次我必须使用这个:
driver.findElement(By.xpath("//*[@id=\'formtop\']/div/form/div/fieldset[2]/div[2]/button[2]")).click();
并且下一页上的相同按钮将不接受任何内容。
我试过了:
WebElement stupidBtn = driver.findElement(By.xpath("//*[@id=\'formtop\']/div/form/div/fieldset[3]/div[2]/button[2]"));
stupidBtn.click();
driver.findElement(By.xpath("//*[@id=\'formtop\']/div/form/div/fieldset[3]/div[2]/button[2]")).click();
WebElement stupidBtn = driver.findElement(By.xpath("//*[@id=\'formtop\']/div/form/div/fieldset[3]/div[2]/button[2]"));
JavascriptExecutor executor = (JavascriptExecutor) driver;
executor.executeScript("arguments[0].click();", stupidBtn);
WebElement stupidBtn = driver.findElement(By.id("//*[@id=\'formtop\']/div/form/div/fieldset[3]/div[2]/button[2]"));
Actions buildAct = new Actions(driver);
buildAct.moveToElement(stupidBtn).click(stupidBtn);
buildAct.perform();
driver.findElement(By.cssSelector("#formtop>div>form>div>fieldset:nth-child(3)>div.multiform_buttons>button.next_btn.btn.green")).click();
总的来说,我想知道我不了解的内容以及为什么我不能始终使用与Katalon Automation Recorder中相同的语法。不幸的是,KAR无法满足我的所有需求。
感谢致敬
如果您所谈论的“页面”不是真正的页面过渡,但是每按一次“下一个按钮”都会动态更新同一页面,则您描述的行为可能会发生。
我过去曾经看过多个“多页面”表单,它们都在同一页面上,但是根据用户所在表单的哪一部分来显示和隐藏不同的“页面”。
因此,当您尝试在第二个按钮上使用第一个定位器时,它仍然会定位第一个按钮,尝试与之交互,并引发异常,表明该元素不可见/无法与之交互。
过去,我已经基于使用findElements构建了解决方案,然后循环这些元素以单击当前显示的元素。
ArrayList<WebElement> elements = (ArrayList<WebElement>) driver.findElements(By.xpath("//button[contains(.,'Btn')]"));
for(WebElement element : elements) {
if(element.isDisplayed()) {
element.click();
}
}
没有看到页面,我无法确定是否确实如此,但这是有可能的。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句