我是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无法满足我的所有需求。
感谢和问候
答案 0 :(得分:1)
如果您所谈论的“页面”不是真正的页面过渡,但是每次按下“下一个按钮”都会动态更新同一页面,则您描述的行为可能会发生。
过去,我已经看到多个“多页”表单,它们都在同一页面上,但是根据用户所在表单的哪一部分显示或隐藏不同的“页面”。
因此,当您尝试在第二个按钮上使用第一个定位器时,它仍会定位第一个按钮,尝试与之交互,并引发异常,表明该元素不可见/无法与之交互。
过去,我已经基于使用findElements构建了解决方案,然后循环这些元素以单击当前显示的元素。
ArrayList<WebElement> elements = (ArrayList<WebElement>) driver.findElements(By.xpath("//button[contains(.,'Btn')]"));
for(WebElement element : elements) {
if(element.isDisplayed()) {
element.click();
}
}
没有看到页面,我不能说是否确实如此,但这是有可能的。
答案 1 :(得分:0)
查询类“ next_btn”是否仅链接到该按钮,那么您知道它是该元素的可靠唯一定位器。在这种情况下,我建议您直接引用该类以获得所需的元素,就像这样……
driver.findElement(By.cssSelector(".next_btn")).click();
答案 2 :(得分:0)
要能够捕捉到该按钮并使之起作用,您需要在Web浏览器中查看DOM并检查是否放置了正确的xpath。 每个页面中的HTML可能与其他页面不同,这就是为什么selenium找不到按钮,并且Selenium检查您的DOM以查看元素以及元素是否存在,以便可以使用按钮的原因。
答案 3 :(得分:0)
我尝试了一些不同的xpath。例如
driver.findElement(By.xpath("//div[@id='formtop']//form[@class='multiform']/div/fieldset[3]//button[.='Weiter']")).click();
肯定按下了按钮(颜色已更改),但是网站没有更新(手动单击效果很好)。
最后这对我有用:
driver.findElement(By.xpath("//div[@id='formtop']/div/form/div/fieldset[3]/div[2]/button[2]")).click();
我不知道这里出了什么问题。也许我忘记了一些东西或有错字。
谢谢大家。