如何使用Selenium和C#单击登录按钮

问题描述 投票:0回答:4

我正在尝试创建一个简单的测试,在该测试中,您将转到URL,输入您的登录凭据,然后单击该按钮进行登录。除单击按钮外,它正在执行所有操作。我试图通过调用ClassName做到这一点。谁能看我的测试,看看我做错了什么?

public void test_search()
{
    var driver2 = new ChromeDriver(@"C:\Users\MyName\Desktop\NUnitTestProject1\NUnitTestProject1\bin\Debug\netcoreapp2.1");
    driver2.Navigate().GoToUrl("https://portal.crushdata.com/");
    driver2.FindElement(By.Name("Email")).SendKeys("[email protected]");
    driver2.FindElement(By.Name("Password")).SendKeys("Password");
    driver2.FindElement(By.ClassName("btn bg-teal btn-block btn-lg waves-effect")).Click();
}

这是我按钮的类名。

enter image description here

c# selenium xpath css-selectors webdriverwait
4个回答
0
投票

使用CSS选择器,如下所示:

By.ClassName("btn.bg-teal.btn-block.btn-lg.waves-effect")

每个点代表一个类。

请参阅this页面以获取更多信息,这是该页面的示例:

。name1.name2

选择在其class属性中设置了name1和name2的所有元素


0
投票

要单击SIGN IN按钮,您必须为所需的WebDriverWait引入ElementToBeClickable(),并且可以使用以下任何Locator Strategies

  • CssSelector

    new WebDriverWait(driver, TimeSpan.FromSeconds(20)).Until(ExpectedConditions.ElementToBeClickable(By.CssSelector("button.btn.bg-teal.btn-block.btn-lg.waves-effect"))).Click();
    
  • XPath

    new WebDriverWait(driver, TimeSpan.FromSeconds(20)).Until(ExpectedConditions.ElementToBeClickable(By.XPath("//button[text()='SIGN IN']"))).Click();
    

0
投票

尝试使用按钮xpath。打开开发工具。右键单击要单击的按钮>选择检查>然后在开发工具窗口中右键单击html,然后从“复制”选项中复制“复制Xpath”。

然后在您的代码中将FindElement替换为FindElementByXPath

driver2.FindElementByXPath("//*xpath/goes/here")).Click();


0
投票

鉴于您的共享html块,以下XPath就足够了。

//div[contains(@class = "text-center")]//button[contains(@class, 'btn bg-teal btn-block btn-lg waves-effect') AND @type = 'submit']

如果驱动程序仍然无法单击,则应考虑以下事项:

  1. XPath是唯一的吗?将xpath粘贴到检查元素标签中chrome的devtools搜索框中,并确保提供的xpath定位到您想要的元素。如果不是这种情况,则应使xpath更具唯一性。
  2. 元素是否在iframe中?如果该元素在iframe中,则默认情况下驱动程序将无法找到它。在这种情况下,您将需要先切换到iframe,然后尝试查找元素并与之交互。
© www.soinside.com 2019 - 2024. All rights reserved.