Как мне нажать кнопку «Войти в зону охлаждения» на сайте версии диска с использованием селена? - PullRequest
0 голосов
/ 26 февраля 2020

Я перепробовал все, чтобы мой код нажал кнопку, но это невозможно. Я пытался использовать xpath, id, class. Ни один из них не работал. У кого-нибудь есть идея, чтобы это сработало?

HTML:

  <div data-focus-lock-disabled="false" class="inner-1ilYF7">
    <form class="modal-yWgWj- container-14fypd sizeSmall-1jtLQy fullscreenOnMobile-1aglG_">
        <div class="scrollerWrap-2lJEkd content-1EtbQh scrollerThemed-2oenus themeGhostHairline-DBD-2d">
            <div class="scroller-2FKFPG systemPad-3UxEGl inner-ZyuQk0 content-dfabe7">
                <h2 class="h2-2gWE-o title-3sZWYQ defaultColor-1_ajX0 title-18-Ds0 marginBottom20-32qID7 marginTop8-1DLZ1n">WOAH THERE. WAY TOO SPICY</h2>
                <div class="body-Mj9Oxz medium-zmzTW- primary-jw0I4K">You're sending messages too quickly!</div>
            </div>
        </div>
                <div class="flex-1xMQg5 flex-1O1GKY horizontalReverse-2eTKWD horizontalReverse-3tRjY7 flex-1O1GKY directionRowReverse-m8IjIq justifyBetween-2tTqYu alignStretch-DpGPf3 wrap-ZIn9Iy footer-3rDWdC" style="flex: 0 0 auto;">
                    <button type="submit" class="primaryButton-2BsGPp button-38aScr lookFilled-1Gx00P colorBrand-3pXr91 sizeXlarge-2yFAlZ grow-q77ONN">
                        <div class="contents-18-Yxp">Enter the chill zone</div>
                    </button>
                </div>
            </form>
        </div>

Мой код для поиска кнопки выглядит следующим образом:

try
    {
        var element = driver.FindElement(By.XPath("//*[text()='Enter the chill zone']"));

        if (element.Displayed)
        {
            driver.FindElement(By.XPath("/html/body/div/div[2]/div[2]/div[2]/div[3]/form/div[2]/button")).Click();
            Console.WriteLine("Button clicked!");
        }
    }
catch (Exception e)
{
     Console.WriteLine(e);
}

Ответы [ 2 ]

0 голосов
/ 26 февраля 2020

Требуемый элемент является элементом Angular, поэтому для определения местоположения / click() на элементе, который вам нужно вызвать WebDriverWait для element_to_be_clickable(), можно использовать любой из следующих элементов: следующие стратегии локатора :

  • CssSelector:

    new WebDriverWait(driver, TimeSpan.FromSeconds(20)).Until(ExpectedConditions.ElementToBeClickable(By.CssSelector("button[type='submit'] div[class^='contents']"))).Click();
    
  • XPath:

    new WebDriverWait(driver, TimeSpan.FromSeconds(20)).Until(ExpectedConditions.ElementToBeClickable(By.XPath("//button[@type='submit']/div[starts-with(@class,'contents') and text()='Enter the chill zone']"))).Click();
    
0 голосов
/ 26 февраля 2020

Вы можете попытаться достичь элемента по типу атрибута. Как это:

"//button[@type='submit']"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...