簡體   English   中英

無法在 selenium 中找到具有點擊屬性的元素

[英]Unable to find the element in selenium which is having on-click attribute

我正在嘗試使用 Selenium 查找元素。 我嘗試使用x-pathclass name ,但兩種方法都無法點擊元素。

具體來說,我試圖找到新的帳戶鏈接元素,它基本上是一個onclick屬性。

<a onclick="getDashboard().newAccount(event)" href="#" class="dashboard_menu_div_main">

下面是完整代碼。

<div class="dashboard" style="">
    <div class="dashboard_context">
        <div class="dashboard_context_title">Welcome Muamalaty Portal</div>In relation to the provision of Services and supply of Products by Etisalat Website Customer of Etisalat Website shall observe and be bound by Etisalat Conditions applicable to each.
        </div>
        <div class="dashboard_Body dashboard-content">
            <div class="dashboard_menu_div dashboard-menu">
                <ul>
                    <li>
                        <a onclick="getDashboard().newAccount(event)" href="#" class="dashboard_menu_div_main">
                            <div class="dashboard_menu_number">01</div>
                            <div class="dashboard_menu_img">
                                <img src="/cim/resources/images/produts/dashboard/new-account.png">
                            </div>
                            <div class="dashboard_menu_menu_fonts">New Account</div>
                        </a>
                    </li>
                    <li>
                        <a onclick="getDashboard().standAlone(event,'714857547');" href="#" class="dashboard_menu_div_main">
                            <div class="dashboard_menu_number">05</div>
                            <div class="dashboard_menu_img">
                                <img src="/cim/resources/images/produts/dashboard/standalone.png">
                            </div>
                            <div class="dashboard_menu_menu_fonts">Standalone Devices</div>
                        </a>
                    </li>
                    <li>
                        <a onclick="new PendingOrders().init({evt:event});" href="#" class="dashboard_menu_div_main">
                            <div class="dashboard_menu_number">08</div>
                            <div class="dashboard_menu_img">
                                <img src="/cim/resources/images/produts/dashboard/pending-orders.png">
                            </div>
                            <div class="dashboard_menu_menu_fonts">Pending Orders</div>
                        </a>
                    </li>
                    <li>
                        <a onclick="getDashboard().newPreOrder(event)" href="#" class="dashboard_menu_div_main">
                            <div class="dashboard_menu_number">16</div>
                            <div class="dashboard_menu_img">
                                <img src="/cim/resources/images/produts/dashboard/new-preorder.png">
                            </div>
                            <div class="dashboard_menu_menu_fonts">New PreOrder</div>
                        </a>
                    </li>
                    <li>
                        <a onclick="new Miscellaneous().init({evt:event});" href="#" class="dashboard_menu_div_main">
                            <div class="dashboard_menu_number">22</div>
                            <div class="dashboard_menu_img">
                                <img src="/cim/resources/images/produts/dashboard/miscellaneous.png">
                            </div>
                            <div class="dashboard_menu_menu_fonts">Miscellaneous services</div>
                        </a>
                    </li>
                </ul>
            </div>
        </div>
    </div>
</div>

我嘗試了下面的代碼,因為有 7 個 iframe 我試圖點擊所有框架中的位置,每次它在所有框架中都失敗了。

for(int i=0;i<=s1;i++) {
    try {
        driver.switchTo().frame(i);
        driver.findElement(By.xpath("./div[@class=\"dashboard\"]/div[2]/div[@class=\"dashboard_menu_div dashboard-menu\"]/ul/li/a[@onclick=\"getDashboard().newAccount(event)\"]@onclick")).click();

    }
    catch(Exception e) {
        System.out.println("failed "+i+" time");
    }
}

我嘗試過的另一條路徑是:

//driver.findElement(By.xpath(".//input[contains(@onclick,'getDashboard().newAccount(event)')]")).click();
//driver.findElement(By.cssSelector("//dashboard_menu_div > ul:nth-child(1) > li:nth-child(1) > a:nth-child(1)")).click();
  1. 對於您嘗試過的xpath以下,它應該//a不是.//input

      //driver.findElement(By.xpath(“ .// input [包含(@ onclick,'getDashboard()。newAccount(event)')]”)))。click();\n
  2. 如果在xpath之上,更改后仍然不起作用,請添加一些調試代碼,以確保切換到正確的iframe 之后,您可以刪除調試代碼。 對於調試代碼,您可以找到容易位於同一iframe的元素,例如標題:“ Welcome Muamalaty Portal”

     try { driver.switchTo().frame(i); //debug code begin String title = driver.findElement(By.cssSelector("div.dashboard_context_title")) .getText(); System.out.println("Title: " + title); //debug code end // click New Accont Link driver.findElement(By.cssSelector("a[onclick*='newAccount']")).click(); } catch(Exception e) { System.out.println("failed "+i+" time"); } 

根據您提供的HTML ,我們需要構造一個唯一的cssSelectorxpath來標識並單擊WebElement ,如下所示:

  • xpath

     driver.findElement(By.xpath("//div[@class='dashboard_menu_div dashboard-menu']//following::a[1]")).click(); 
  • cssSelector

     driver.findElement(By.cssSelector("div.dashboard_menu_div.dashboard-menu > a:nth-child(1)")).click(); 

切換到正確的iframe后,其工作正常。 感謝你們的支持。

driver.switchTo().frame(6);
driver.findElement(By.xpath(".//*[@id='mainForm:productsList']/div[2]/div[3]/div[2]/div/ul/li[1]/a")).click();

要么

driver.switchTo().frame(6); driver.findElement(By.cssSelector(".dashboard_menu_div_main")).click();
    List<WebElement> elements = driver.findElementsByTagName("a");
    for (WebElement el : elements) {
        if (el.getAttribute("onclick").contains("newAccount(event)")){
            el.click();
            //or do what you need
        }

只需嘗試遍歷所有元素並通過屬性值找到確切的元素即可。

您可以試用TestProject免費自動化平台。 有一個很好的工具可以巧妙地保存以后與之交互所需的所有元素

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM