我是Selenium和GWT的初学者,我正在尝试测试像Paint这样添加SmartGWT库的GWT Web应用程序。我遇到了一个问题,试图用一种方法找到网页的元素,这将与所有浏览器兼容。我尝试了很多方法来定位元素,但没有一个方法有效。首先,我尝试使用不起作用的ID来定位元素。然后,我尝试了绝对XPath的方法,它不适用于不同浏览器上的一些元素。然后,我尝试使用相对XPath定位这些元素但不幸的是,该方法也出现了同样的问题。然后,我找到了另一种使用此链接中给出的scLocators定位这些元素的方法:Using Selenium in SmartGWT。
我能够使用此链接中提到的步骤在Selenium IDE中生成scLocators。但是当我在停止录制后在Selenium IDE中播放整个测试用例时,IDE本身无法找到它在我执行各种操作(如单击,写入文本等)时生成的元素。 p>
此外,我还使用scLocators在Java中使用Selenium WebDriver查找这些元素。但同样,它没有起作用,并且没有显示任何此类元素。
这是我的代码。
public class RelativeXpath {
public static void main(String[] args) throws InterruptedException {
System.setProperty("webdriver.chrome.driver", "D:\\SELENIUM\\Drivers\\chromedriver.exe");
SmartClientWebDriver driver = new SmartClientChromeDriver();
driver.manage().timeouts().implicitlyWait(10,TimeUnit.SECONDS);
Thread.sleep(3000);
driver.get("xxxxxx"); //here I have given the URL of my web application
WebDriverWait wait = new WebDriverWait(driver, 10);
wait.until(ExpectedConditions.titleContains("XXXX")); // here I've given the title of my web application
wait.until(ExpectedConditions.elementToBeClickable(By.id("frontCanvas")));
Thread.sleep(4000);
WebElement Draw = driver.findElement(ByScLocator.scLocator("//HLayout[ID=\"long_ribbon_HLayout\"]/member[Class=IconMenuButton||index=1||length=20||classIndex=0||classLength=4||roleIndex=0||roleLength=15||scRole=button]/icon"));
Draw.click();
Thread.sleep(2000);
}
}
下面给出了我要点击的图片+按钮元素的HTML代码。
<div id="isc_C" eventproxy="isc_IconButton_Client_0" role="button" aria-label="XXXX" style="position: absolute; left: 80px; top: 0px; width: 42px; height: 42px; z-index: 200090; box-sizing: border-box; overflow: hidden; cursor: pointer;" onscroll="return isc_IconButton_Client_0.$lh()">
<div id="isc_D" eventproxy="isc_IconButton_Client_0" style="position: relative; display: inline-block; box-sizing: border-box; width: 100%; vertical-align: top; visibility: inherit; z-index: 200090; cursor: pointer;">
<table role="presentation" width="42" height="42" cellspacing="0" cellpadding="0">
<tbody>
<tr>
<td class="iconButton" style="padding: 4px; background-color: transparent;" valign="top" nowrap="true" align="center">
<img src="XXXX.png" style="vertical-align:middle;margin-bottom:5px;" eventpart="icon" suppress="TRUE" draggable="true" width="32" height="32" border="0" align="TEXTTOP">
<br>
</td>
</tr>
</tbody>
</table>
</div>
</div>
我该怎么做才能解决这个问题?
答案 0 :(得分:1)
首先,你下面的代码是错误的
purchaseOnHoldSetRequest.AdditionalDetail[0] = new AdditionalDetail();
purchaseOnHoldSetRequest.AdditionalDetail[0].Description = "1";
您需要将WebElement Draw = driver.findElement(ByScLocator.scLocator("//HLayout[ID=\"long_ribbon_HLayout\"]/member[Class=IconMenuButton||index=1||length=20||classIndex=0||classLength=4||roleIndex=0||roleLength=15||scRole=button]/icon"));
替换为ByScLocator.scLocator
或xpath
,如下所示
cssSelector
现在你写的xpath和你分享的HTML完全不同。
根据您的HTML,如果您想点击下面的元素
WebElement Draw = driver.findElement(By.xpath("//HLayout[ID=\"long_ribbon_HLayout\"]/member[Class=IconMenuButton||index=1||length=20||classIndex=0||classLength=4||roleIndex=0||roleLength=15||scRole=button]/icon"));
然后使用xpath作为
<td class="iconButton" style="padding: 4px; background-color: transparent;" valign="top" nowrap="true" align="center">
OR
//td[@class='iconButton']
现在,如果你的元素如下: -
//td[@class='iconButton' and @valign='top']
然后你可以使用: -
<img src="XXXX.png" style="vertical-align:middle;margin-bottom:5px;" eventpart="icon" suppress="TRUE" draggable="true" width="32" height="32" border="0" align="TEXTTOP">
希望它会对你有所帮助:)。