为什么同一个按钮需要不同的元素定位器才能工作?

Sydmaster

我是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无法满足我的所有需求。

感谢致敬

ony

如果您所谈论的“页面”不是真正的页面过渡,但是每按一次“下一个按钮”都会动态更新同一页面,则您描述的行为可能会发生。

我过去曾经看过多个“多页面”表单,它们都在同一页面上,但是根据用户所在表单的哪一部分来显示和隐藏不同的“页面”。

因此,当您尝试在第二个按钮上使用第一个定位器时,它仍然会定位第一个按钮,尝试与之交互,并引发异常,表明该元素不可见/无法与之交互。

过去,我已经基于使用findElements构建了解决方案,然后循环这些元素以单击当前显示的元素。

ArrayList<WebElement> elements = (ArrayList<WebElement>) driver.findElements(By.xpath("//button[contains(.,'Btn')]"));
for(WebElement element : elements) {
    if(element.isDisplayed()) {
        element.click();
    }
}

没有看到页面,我无法确定是否确实如此,但这是有可能的。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

为什么运行同一个程序需要不同的时间?

对于不同的数据集,同一个 CNN 模型是否需要不同的学习率?

为什么同一个指针的地址不同?

为什么这两个路由器不能在同一个网络中工作?

打印同一个数组,在不同的函数中是不同的,为什么呢?

为什么我从同一个查询中得到两个不同的结果

为什么 jquery datepicker 在同一个表单中只能工作一次?

在同一个按钮中添加不同的图像

为什么numpy从同一个随机状态返回不同的随机数?

为什么同一个程序在Windows上与Mac上运行的方式不同

为什么同一个地址返回不同的值?

为什么从同一个包创建不同的对象

为什么elasticsearch 对不同索引的同一个查询返回的结果差别太大?

为什么同一个ajax调用有不同的请求头?

为什么同一个磁盘读取测试结果如此不同

为什么我从同一个神经网络模型得到不同的预测?

为什么同一个事件识别不同的activeElements?

JS:为什么数组的所有元素似乎共享同一个参考点?

Xpath 定位器指向同一 Web 元素

为什么我需要绑定一个通过同一个对象调用的阴影函数?

Selenium Automation-需要组合一个或多个xpath定位器以形成一个定位器

为什么对同一个向量的两个引用为向量的每个元素返回不同的内存地址?

为什么 Canvas 在同一个 html 文档中的两个单独的 canvas 元素上以不同的方式绘制相同宽度和长度的相同图像?

为什么我的下一个按钮仍然加载同一个对象?

为什么同一个笔记本在两个不同的环境中分配大量不同的 vram?

为什么我需要一个 goroutine 才能让它工作?

Unity 编辑器脚本:如何使用同一个按钮执行两个不同的操作?

当多个线程使用迭代器同时在同一个数组列表上工作时,为什么此代码不会抛出 ConcurrentModificationException

为什么对于具有不同库的同一个wav文件,我得到的采样率不同?