我正在编写一个自动化网页的selenium脚本。我需要点击列表中定义的按钮。
这是我的网络用户界面的图像 - New Account
是我所指的按钮
这是我的XML代码:
<div id="00B4E000000LQ2C_topNav" class="topNav primaryPalette">
<div id="00B4E000000LQ2C_subNav" class="subNav">
<div class="linkBar brandSecondaryBrd">
<div id="00B4E000000LQ2C_listButtons" class="listButtons">
<ul class="piped">
<li>
<input class="btn" type="button" title="New Account" onclick="navigateToUrl('/setup/ui/recordtypeselect.jsp?ent=Account&ekp=001&retURL=%2F001%3Ffcf%3D00B4E000000LQ2C%26isdtp%3Dnv%26nonce%3Df8007ad94993912b7ff4149193a6096ccfed4ebb1454e0b9b310ad14b61de71d%26sfdcIFrameOrigin%3Dhttps%253A%252F%252Fcs83.salesforce.com&save_new_url=%2F001%2Fe%3FretURL%3D%252F001%253Ffcf%253D00B4E000000LQ2C%2526isdtp%253Dnv%2526nonce%253Df8007ad94993912b7ff4149193a6096ccfed4ebb1454e0b9b310ad14b61de71d%2526sfdcIFrameOrigin%253Dhttps%25253A%25252F%25252Fcs83.salesforce.com&isdtp=vw','LIST_VIEW','new');" name="new" value="New Account"/>
</li>
<li class="lastItem">
</ul>
我用过:
driver.findElement(By.xpath(".//*[@id='00B4E000000LQ2C_listButtons']/ul/li[1]/input")).click();
(X路由萤火虫给出)但它给出了一个错误陈述
无法找到元素
请帮我编写脚本/找到此按钮。
答案 0 :(得分:1)
您不必使用Firebug生成的XPath并在整个过程中检查元素的父项。我们可以做得更好,你可以写一个更可靠,更简单的方法来定位元素:
driver.findElement(By.name("new"));
或:
driver.findElement(By.cssSelector("input[name=new]"));
或:
driver.findElement(By.cssSelector("input[value='New Account']"));
请注意,您拥有的XPath表达式看起来有效。您可能遇到了时间问题,需要等待元素存在,可见性或可点击性,请参阅:How to wait until an element is present in Selenium?。
并且,如果按钮位于iframe
内,则需要切换到其上下文,然后才搜索按钮:
driver.switchTo().frame("ext-comp-1005");
答案 1 :(得分:0)
嗨,请尝试如下
// first way
driver.findElement(By.xpath("//*[@name='new']")).click();
// second way
driver.findElement(By.xpath("//*[@class='btn']")).click();
// basically you can use various attributes of input tag with button inside the xpath to click
更新使用i frame
// A short way to identify how many iframe's are present on a web page
List<WebElement> numberOfFrames= driver.findElements(By.tagName("iframe"));
System.out.println("Total Number of iframes present are : " +numberOfFrames.size());
for(int i=0;i<numberOfFrames.size();i++){
// here u can identify iframes with any of its attribute vale say name,title or which is most suitable.
System.out.println("Name of the i-frames : " + numberOfFrames.get(i).getAttribute("name"));
}
// Back to your question - button lies inside iframe hence
// key here is before clicking you have to switch to the frame first
driver.switchTo().frame(driver.findElement(By.name("frame name")));
希望这可以帮助你