我是Selenium的新手。不确定如何处理这种情况。我正在一个网站上工作,该网站有几个按钮,代码如下,
<a class="Some big class name" datacommunication="SelectItem" token="some token number" model-id="Id1" element="button">
<i class="classname">Book Ticket</i>
</a>
<a class="Some big class name" datacommunication="SelectItem" token="some token number" model-id="Id2" element="button">
<i class="classname">Book Ticket</i>
</a>
&#13;
我尝试使用以下命令点击它,
ele = driver.FindElement(By.ClassName("Some big class name"));
但它失败并显示以下消息,不支持复合类名。考虑搜索一个类名并过滤结果。
ele = driver.FindElement(By.CssSelector("a[model-id='Id1']")); fails with 'Test method TestBot.HomeTest.bookTicket threw exception:
OpenQA.Selenium.WebDriverTimeoutException: Timed out after 10 seconds'
尝试使用XPATH
,
ele = driver.FindElement(By.XPath("\\\a[@model-id='Id1']")); doesn't work either.
我无法控制html。无法改变它。
请告诉我如何识别此类情景中的元素。
答案 0 :(得分:4)
您不能在类名中包含空格。这些实际上是由空格分隔的多个类。您可以使用css选择器
找到上述元素var ele = driver.FindElements(By.CssSelector(".Some.big.class.name"))
当然,这将找到两个元素。要找到第一个,你可以使用
var ele = driver.FindElement(By.CssSelector("a[model-id='Id1']"))
您可以在此处找到有关css选择器的帮助:http://www.w3schools.com/cssref/css_selectors.asp
<强>更新强>
我刚注意到你的XPath似乎有错误的斜线。如果您想使用XPath,请尝试
//a[@model-id='Id1']
但请注意,css选择器的性能优于XPath。
答案 1 :(得分:1)
在Selenium WebDriver中有多种方法可以找到您的WebElement。 但始终记住所有都基于您的属性或HTML标记的组合,所以大小写可以是任何一个 1-第一种方式是使用id 2-第二个是姓名 3-班级名称 4-有时你可以使用Tagname 5-一些时间linkText 6-一些时间部分链接文本 7-使用xpath 8-使用css选择器
所以在你的情况下我们需要得到Xpath和Css Selector的帮助 所以你元素的xpath
语法:
//[@attribute ='value of selected tag']例 id1:
//a[@model-id='Id1']id2:
//a[@model-id='Id2']
以下两个元素都是css Selector 语法
[attribute ='value']ID1:
a[model-id='Id1']
ID2:
a[model-id='Id2']
http://www.slideshare.net/weekendtesting/css-selector-29312437 http://www.slideshare.net/weekendtesting/locators-in-selenium-bnt-09
答案 2 :(得分:0)
findElements和findElement之间存在差异。
FindElement :findElement返回单个元素。
FindElements :返回相同元素的列表。在此示例中,有多个具有相同类名的类,因此请使用driver.findElements方法。
driver.findElements将返回具有该类名的所有元素的列表。 现在,您有所有元素的列表,但您只需要其中一个元素。 因此,迭代列表以从列表中获取单个元素。
List<WebElement> elementList= driver.FindElement(By.ClassName("Some.big.class.name"));
Iterator itr = elementList.iterator();
while(itr.hasNext())
{
WebElement element = itr.next();
if(element.getAttribute("model-id").equals("Id1")){
element.click();
break;
}//if block ends here
}//while loop ends here
如果没有任何作用,您也可以使用XPATH
答案 3 :(得分:0)
非常感谢你的帮助。我使用以下代码来克服上述问题,
WebDriverWait wait = new WebDriverWait(driver,TimeSpan.FromSeconds(10)); wait.Until(ExpectedConditions.ElementIsVisible(By.CssSelector( “A [数据模型-ID = 'C5']”)))点击();
使用上面的代码,我可以点击按钮。
再次感谢您的帮助和知识共享。
阿米特
答案 4 :(得分:0)
您可以使用xpath进行定位。
WebElement ele = driver.findElement(By.xpath("//*[@class='Some big class name']"));
答案 5 :(得分:-2)
要识别硒中的元素,有多种方法。
要查看详细信息,请参阅BY Class.
尝试找到唯一可以识别元素的方法。如果可用的话,从id开始,如果没有任何效果,请使用XPATH。 XPATH比id和CSS选择器慢。