2017-09-06 13 views
1

私はSeleniumとGWTの初心者ですが、SmartGWTライブラリが追加されたPaintのようなGWT Webアプリケーションをテストしようとしています。私は、すべてのブラウザと互換性のある単一の方法でウェブページの要素を探し出す際に問題が発生しました。私は要素を見つけるために多くの方法を試しましたが、どれも効果がありませんでした。まず、動作しなかったIDを使って要素の位置を特定しようとしました。それから、絶対的なXPathのメソッドを試しましたが、これは異なるブラウザ上のいくつかの要素では機能しませんでした。次に、相対XPathを使用してこれらの要素の配置を試みましたが、残念なことに、同じ問題が同じ方法で発生しました。次に、このリンクで指定されているようにscLocatorsを使用してこれらの要素を見つける別の方法を見つけました:Using Selenium in SmartGWTSeleniumを使用してSmartGWTアプリケーション内の要素を見つけることができません

このリンクに記載されている手順を使用して、Selenium IDEでscLocatorsを生成できました。しかし、録音を止めた後、Selenium IDEでテストケース全体を演奏したとき、IDE自体は、クリックやテキストの作成などのさまざまな操作を行っていたときに生成した要素を見つけることができませんでした。

また、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

HTMLのレイアウトとは何ですか? –

+0

申し訳ありません私の会社のルールのため、ここにHTMLコードを掲載することはできません。しかし、私はあなたに聞くことができるそのレイアウトに関するいくつかの関連情報を与えることができます。 – DG4

+0

は、svgタグを持つHTMLですか? –

答えて

1

あなたのコードの下にあるすべての最初には、今あなたが書いていると、あなたが持っているHTMLを共有xpathがあるあなたは

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またはcssSelectorByScLocator.scLocatorを交換する必要が

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")); 

間違っています全く違います。 :あなたのHTMLあたり、あなたはあなたの要素は以下であれば、

//td[@class='iconButton'] 

OR

//td[@class='iconButton' and @valign='top'] 

としてXPathを使用

<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"> 

次に、あなたが使用することができます: -

(//td[@class='iconButton']/img[@eventpart='icon'])[3] 

は、それはあなたを助けることを願っています:)

+0

私は、あなたがしたようにByScLocator.scLocatorをxpathに置き換えようとしましたが、同じエラーを再び示しています。それと並んで、「// td [@ class = 'iconButton']/img [@ eventpart = 'icon']」と提案したときにXPathを使用すると、私の知る限り、最初の画像アイコンこれらのプロパティで私のアイコンは、リストの3番目または4番目です。 – DG4

+0

あなたの言った位置ごとに私のxpathが更新されました。現在は3位に設定されています。コンビニエンスごとに変更することができます –

+0

あなたの方法はChrome、Firefox、Edgeではうまく機能しますが、Internet Explorerでは機能しません。何をすべきか?私はここにこの質問を掲載しました:https://stackoverflow.com/questions/46094310/unable-to-locate-the-elements-of-smartgwt-application-using-selenium-in-ie-brows – DG4

関連する問題