亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

CSS 元素掩蓋了 Xpath 元素

CSS 元素掩蓋了 Xpath 元素

C#
jeck貓 2022-11-21 21:35:22
臨時 CSS 元素遮擋了我要單擊的 xpath 元素。在 Visual Studio 中使用 Selenium 我正在編寫一個要單擊元素的測試用例。但是當我運行這個測試用例時,我收到一條錯誤消息告訴我:OpenQA.Selenium.ElementClickInterceptedException Element <a href="#/app/customer/handling/devices"> is not clickable at point (105,221) because another element <div class="showbox layout-align-center-center layout-row ng-star-inserted"> obscures it模糊元素似乎是一個 CSS 元素。但是當我手動轉到此頁面,檢查代碼并搜索此 css 元素時 <div class="showbox layout-align-center-center layout-row ng-star-inserted">,我沒有得到任何結果。因此,我假設這個 CSS 元素是臨時的,并且只能在頁面加載時被識別幾秒鐘。Task.Delay(4000).Wait();如果我在這個測試用例中放置一個靜態等待方法,我就能夠完成這個測試用例,這一事實證實了這個假設。但是我對在代碼中使用靜態等待方法的解決方案不感興趣。我希望能夠等待臨時 css 消失,這樣我就可以點擊我想要的 xpath 元素。這是我的代碼:var wait = new WebDriverWait(driver, TimeSpan.FromSeconds(30));wait.Until(ExpectedConditions.ElementIsVisible(By.CssSelector("div class='showbox layout-align-center-center layout-row ng-star-inserted'")));//Waiting for temporary CSS element to be visible            wait.Until(ExpectedConditions.InvisibilityOfElementLocated(By.CssSelector("div class='showbox layout-align-center-center layout-row ng-star-inserted'")));//Waiting for temporary CSS element to disappearwait.Until(ExpectedConditions.ElementToBeClickable(By.XPath("//div/div[2]/nav[2]/div/ul/li[1]/a"))).Click();//Click on "Handle Tools" link正如您在我的代碼中的注釋中看到的那樣,我在這里做了三件事:1. I wait for the temporary CSS to be loaded2. I wait for it to disappear3. I click on the xpath element.當我這樣做時,我收到一條錯誤消息,告訴我我要查找的 CSS 選擇器無效。如果我跳過第一步,只是等待 CSS 消失/“不可見”,它會檢查得太快,并在 CSS 元素開始加載之前查看。所以要么我沒有正確編寫 By.CssSelector 格式?;蛘?CSS 元素被稱為不同于 Visual Studio 在我上面引用的錯誤消息中調用它的東西。所以請告訴我,如果我在這里使用不正確的方式來識別這個 CSS 元素:wait.Until(ExpectedConditions.InvisibilityOfElementLocated(By.CssSelector("div class='showbox layout-align-center-center layout-row ng-star-inserted'")));或者還有另一種動態等待臨時 CSS 元素的方法嗎?或者我能以某種方式確認隱藏 CSS 元素的名稱實際上稱為“div class='showbox layout-align-center-center layout-row ng-star-inserted'”嗎?
查看完整描述

2 回答

?
慕森王

TA貢獻1777條經驗 獲得超3個贊

這種情況下的問題是我的 CSS 選擇器確實無效。刪除開頭的“div class=”并添加“.” 解決了問題。

前:

"div class='showbox layout-align-center-center layout-row ng-star-inserted'"

后:

".showbox.layout-align-center-center.layout-row.ng-star-inserted"

感謝 Asyranok 為我的 CSS 選擇器提供了正確的格式。在這種情況下,我不需要你的其余代碼,而是我只是將正確的 CSS 格式從你的代碼復制到我的解決方案中,它就起作用了。:)

我通常只在嘗試識別元素時使用 xpath,所以我不習慣 CSS 和使用什么格式。

還要感謝 JeffC 證實了我的懷疑,即我需要等待模糊元素首先加載,然后再次等待它消失。


查看完整回答
反對 回復 2022-11-21
?
拉莫斯之舞

TA貢獻1820條經驗 獲得超10個贊

所以我不是 100% 確定你所說的 CSS 元素是什么意思。但我認為這只是您可能用詞不當。但是 CSS 是級聯樣式表。它是定義文檔對象模型 (DOM) 元素外觀的標記。


XPath 是一種為驅動程序定義元素位置以找到它并與之交互的方法。Css 選擇器是在 DOM 的 xml 或 html 中查找元素的另一種方法。所以不存在“Css 元素”或“XPath 元素”這樣的東西。它們只是“元素”。


至于解決你所看到的問題,你可以試試這個:


    //This is called an extension method. It adds methods to an existing class. This should go in a static class that is accessible to your driver.

    private static void WaitUntil(this IWebDriver driver, Func<bool> Condition, float timeout)

    {


        float timer = timeout;

        while (!Condition.Invoke() && timer > 0f)

        {


            System.Threading.Thread.Sleep(500);

            timer -= 0.5f;


        }

        System.Threading.Thread.Sleep(500);


    }


driver.WaitUntil(() => driver.FindElementsBy(By.CssSelector(".showbox.layout-align-center-center.layout-row.ng-star-inserted").length == 0);

另請注意,您描述中的 CSS 選擇器完全無效。我建議在像這樣的教程中閱讀它們。


查看完整回答
反對 回復 2022-11-21
  • 2 回答
  • 0 關注
  • 177 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號