线程中的Selenium Web Driver问题。 C#

时间:2017-11-17 04:13:58

标签: c# multithreading selenium

这是代码。

browser = new FirefoxDriver();
browser.Navigate().GoToUrl("https://www.vicroads.vic.gov.au/registration/buy-sell-or-transfer-a-vehicle/buy-a-vehicle/check-vehicle-registration/vehicle-registration-enquiry");
Thread.Sleep(5000);
browser.FindElement(By.Name("ph_pagebody_0$phthreecolumnmaincontent_1$panel$VehicleSearch$RegistrationNumberCar$RegistrationNumber_CtrlHolderDivShown")).SendKeys("asdf");

它工作正常但是如果我在线程中运行它会显示元素不可见....为什么它会抛出一个线程?

2 个答案:

答案 0 :(得分:0)

元素可能是不可见的cuz页面在检查时刻或使用动态名称,类等的网站没有重新加载。

您可以尝试这样的事情:

IWebDriver browser = new FirefoxDriver();
browser.Navigate().GoToUrl("https://www.vicroads.vic.gov.au/registration/buy-sell-or-transfer-a-vehicle/buy-a-vehicle/check-vehicle-registration/vehicle-registration-enquiry");

while ( true ) {
    try {
        browser.FindElement(By.Name("ph_pagebody_0$phthreecolumnmaincontent_1$panel$VehicleSearch$RegistrationNumberCar$RegistrationNumber_CtrlHolderDivShown")).SendKeys("asdf"); 
        break;
    }
    catch { Thread.Sleep(1000);}
}

答案 1 :(得分:0)

在您尝试的xpath之后,似乎name属性是动态的。要找到 Registration number 的文本框,您可以尝试以下任一选项:

  • CssSelector

    browser.FindElement(By.CssSelector("input[class=text text xlong v_registrationNumber v_required][id^=ph_pagebody_)]")).SendKeys("asdf");
    
  • XPath

    browser.FindElement(By.XPath("//input[@class='text text xlong v_registrationNumber v_required'][starts-with(@id, 'ph_pagebody_')]")).SendKeys("asdf");