Ответ 1
Как указывает ошибка, существуют два разных типа Keys
в двух разных пространствах имен.
Вам нужно однозначно квалифицировать тип, написав OpenQA.Selenium.Keys
.
Я пытаюсь сделать стрелку, используя Selenium Webdriver/С# компиляцию, но когда я пытаюсь скомпилировать, я получаю эту ошибку:
"Ключи" - это двусмысленная ссылка между "OpenQA.Selenium.Keys" и 'System.Windows.Forms.Keys' (CS0104)
Мой код:
driver.FindElement(By.Id("ctl00_PlaceHolderMain_ctrlChangeBillingAddress_ctrlChangeBillingAddress_txtBillingAddress")).SendKeys(Keys.ArrowDown);
driver.FindElement(By.Id("ctl00_PlaceHolderMain_ctrlChangeBillingAddress_ctrlChangeBillingAddress_txtBillingAddress")).SendKeys(Keys.Enter);
Как указывает ошибка, существуют два разных типа Keys
в двух разных пространствах имен.
Вам нужно однозначно квалифицировать тип, написав OpenQA.Selenium.Keys
.
Я могу предоставить вам две реализации, но первая работает только локально:
Element.SendKeys(OpenQA.Selenium.Keys.ArrowUp);
char c = '\uE013'; // ASCII code ArrowUp
Element.SendKeys(Convert.ToString(c));
То же самое происходило и с моим кодом. Как и в моей регистрации,
1. У меня были поля "Адреса", которые собирают введенный адрес из поиска Google, а затем заполняют поля соответственно: Sub-urb, city, post code и т.д.
2. Была добавлена кнопка для присоединения файла (например, просмотр с рабочего стола и выбор любого изображения или документа для присоединения)
Я получил ошибку. "Ключи" - это двусмысленная ссылка между OpenQA.Selenium.Keys
и 'System.Windows.Forms.Keys' (CS0104)
Затем я понял, что это означает, что существуют два разных типа ключей в двух разных пространствах имен. Coz для выбора адреса, мой код:
driver.FindElement(By.XPath("//*[@id='PostalAddress_Address']")).SendKeys(Address); //Address to select from autofill and fill textboxes accordingly
Thread.Sleep(500);
driver.FindElement(By.XPath("//*[@id='PostalAddress_Address']")).SendKeys(Keys.ArrowDown);
driver.FindElement(By.XPath("//*[@id='PostalAddress_Address']")).SendKeys(Keys.Enter);
а для файла Attach - код:
//Select and attach file from the computer
driver.FindElement(By.XPath("//*[@id='graduate-education']/div[4]/label")).Click(); //Click Attach file button
Thread.Sleep(500);
//driver.FindElement(By.XPath("//*[@id='graduate-education']/div[4]/label")).SendKeys(AttachFile);
SendKeys.SendWait(@"Complete File Path"); //Select the file from the location
Thread.Sleep(500);
SendKeys.SendWait(@"{Enter}");
Добавленные пространства имен:
using OpenQA.Selenium; using System; using System.Threading; using System.Windows.Forms;
Из-за того, что тип ключей не распознавался, откуда он на самом деле принадлежит, поэтому мне пришлось изменить код полей адреса и использовать OpenQA.Selenium.keys.ArrowDown, как показано ниже:
driver.FindElement(By.XPath("//*[@id='PostalAddress_Address']")).SendKeys(Address); //Address to select from autofill and fill textboxes accordingly
Thread.Sleep(500);
driver.FindElement(By.XPath("//*[@id='PostalAddress_Address']")).SendKeys(OpenQA.Selenium.Keys.ArrowDown);
driver.FindElement(By.XPath("//*[@id='PostalAddress_Address']")).SendKeys(OpenQA.Selenium.Keys.Enter);
Это сработало для меня, надеюсь, то же самое для вас тоже
Я бы предложил сделать следующее:
IWebElement element = driver.FindElement(By.Id("ctl00_PlaceHolderMain_ctrlChangeBillingAddress_ctrlChangeBillingAddress_txtBillingAddress"));
OpenQA.Selenium.Interactions.Actions action = new OpenQA.Selenium.Interactions.Actions(driver);
action.SendKeys(element, Keys.Down).SendKeys(element, Keys.Enter).Build().Perform();
Попробуйте это
IWebDriver driver = new ChromeDriver();
. Driver.Navigate() GoToUrl ( "HTTP: www.google.com");
IWebElement MyElement = driver.FindElement(By.Name("q"));
MyElement.SendKeys(Keys.ArrowUp); MyElement.SendKeys(Keys.ArrowDown);