Selenium Webdriver C# Sendkeys (Keys.Arrowdown)
Я пытаюсь сделать стрелку, используя компиляцию Selenium Webdriver/C#, но когда я пытаюсь скомпилировать, я получаю эту ошибку:
"Ключи" - это неоднозначная ссылка между "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);
6 ответов
Как гласит ошибка, есть два разных Keys
Типы в двух разных пространствах имен.
Вы должны однозначно определить тип, написав OpenQA.Selenium.Keys
,
Я могу предоставить вам две реализации, но первая работает только локально:
Element.SendKeys(OpenQA.Selenium.Keys.ArrowUp);
char c = '\uE013'; // ASCII code ArrowUp
Element.SendKeys(Convert.ToString(c));
То же самое происходило и с моим кодом. Как и в моей регистрации от: 1. У меня были поля адреса, которые забирают введенный адрес из поиска Google, а затем заполняют поля соответственно, такие как: под-урб, город, почтовый индекс и т. Д. 2. Была кнопка, чтобы прикрепить файл (например, просмотреть с рабочего стола и выбрать любое изображение или документ для вложения) Я получил ошибку "Ключи" - это неоднозначная ссылка между OpenQA.Selenium.Keys
а также 'System.Windows.Forms.Keys' (CS0104)
Затем я понял, что это означает, что есть два разных типа ключей в двух разных пространствах имен. Потому что для выбора адреса, мой код был:
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);
и для прикрепленного файла код был:
//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);
Это сработало для меня, надеюсь, то же самое для вас
Try this
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);
Я бы предложил сделать следующее:
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();
Класс Actions - это возможность, предоставляемая Selenium для обработки событий клавиатуры и мыши. В Selenium WebDriver обработка этих событий включает такие операции, как перетаскивание, нажатие на несколько элементов с помощью клавиши управления и другие.
IWebDriver driver = new ChromeDriver();
Actions action = new Actions(driver);
action.SendKeys(Keys.UpArrow);
action.Build().Perform(); // releasing the control
action = new Actions(driver); // reinitialize
action.SendKeys(Keys.DownArrow);
action.Build().Perform();