这是我的元素:
<div id="ctl00_MasterContent_FareOptionsWebPart_FareOptionsFares_ctl123_FarePoint_Outbound28_1" class="FareOptionsFarePoint Outbound Single F28 J1 fakecheck filtered fakechecked" **data-fulfilment="ToD Kiosk SelfPrint MobileTicket eTicket"** radid="28_1" fare="28" data-selectable="1">£35.00</div>
我不能使用任何其他标签,因为它们都是动态的。只有我能用来定位的是数据实现。
1-如果有电子机票,那么它应该是一个点击。 2-如果有移动票证,则应该单击一下。
下面是我的定位器:
//标签
private By _cel = By.xpath("//*[@data-fulfilment='ToD Kiosk SelfPrint MobileTicket eTicket']");
//移动票(如果没有电子票)
private By _celM = By.xpath("//*[@data-fulfilment='ToD Kiosk SelfPrint MobileTicket']");
我的代码如下:
WebElement element = driver.findElement(_table3);
List <WebElement> row = element.findElements(_row);
System.out.println("Up to now I find " + getTextFromElement(_row) + " element on page.");
System.out.println("No of Rows: " + row.size());
List <WebElement> cel = element.findElements(_cel);
System.out.println("Up to now I find " + getTextFromElement(_cel) + " element on page.");
System.out.println("No of Cell: " + cel.size());
String SelfPrint = " SelfPrint ";
if (cel.contains(SelfPrint)) {
clickOnElement(_cel);
}
else
{
clickOnElement(_celM);
}
我的问题是如何在电子票,手机票和自印票之间进行选择?请也指导我编码。
谢谢
答案 0 :(得分:0)
如果只有一个或另一个选项(您的_cel元素或_celm元素)可用,则可以只创建一个同时适用于这两个选项的By选择器,然后单击它。
根据您的示例XPath,这在两种情况下均适用(前提是没有其他元素包含“ ToD Kiosk SelfPrint MobileTicket”数据实现属性)。
private by _cel = By.XPath("//*[starts-with(@Data-Fulfilment, 'ToD Kiosk SelfPrint MobileTicket')]");
由于两个元素都具有以“ ToD Kiosk SelfPrint MobileTicket”开头的Data-Fulfilment属性,因此这两个元素均适用。只要当时页面上只有一个即可。只需使用此选择器单击即可。