Вставить в текстовую область - PullRequest
0 голосов
/ 02 октября 2019

Я попытался упростить свой день, создав программу, которая регистрирует меня в турнирах по карточной игре через селеновый веб-драйвер. Я новичок, поэтому я был в восторге, хотя это были просто основы, или нажмите здесь, подтвердите это, напишите это, но в конце я столкнулся с проблемой, с которой у меня возникают проблемы.

В конце вам нужноотправить колоды через код колоды. Функция sendKeys? (не уверен, что это правильная формулировка) не работает, так как на самом деле его нужно вставить в текстовую область. Всякий раз, когда вы пытаетесь «просто» записать в поле, он говорит, что его неверный код колоды.

driver.findElement(By.xpath("//*[@id=\"react-root\"]/div/div/div[2]/div/div[2]/div/div[4]/div[1]/div/textarea")).click();

 driver.findElement(By.xpath("//*[@id=\\\"react-root\\\"]/div/div/div[2]/div/div[2]/div/div[4]/div[1]/div/textarea")).sendKeys(Keys.chord(Keys.CONTROL + "v"));

Я пошел с этим, первой строкой просто щелкнув в текстовой области, а затем пытаясь вставить его (покаЯ скопировал код колоды вручную, не зная, как я это решу, так как мне нужно вставить 3 разных кода, но это проблема на будущее), но код просто не будет вставлен, и я понятия не имею, где подвох. Я попробовал функцию вставки в другой текстовой области с теми же настройками, что означает, что у меня что-то скопировано в буфер обмена, и оно работало просто отлично.

Пример кода колоды:

" AAECAZICCiT3A94FrtICv/IC9fwC2KAD+KED9KID/KMDCkBWX/4BxAapogPIogPcogPvogPZqQMA "

НадеюсьЯ предоставил все, что должен был, в противном случае, дайте мне знать, и я с удовольствием отправлю больше :) Заранее спасибо, и я надеюсь, что кто-то может помочь мне

1 Ответ

0 голосов
/ 02 октября 2019

Это может не сработать, потому что я не вижу, как вы явно копируете код колоды, как вы упоминали, что вы делали это вручную. Я также изменил ваш пример так, чтобы он не использовал Keys.chord, так как он может вам здесь не понадобиться.

Чтобы скопировать элемент:

deckCodeWebElement = driver.findElement(locatorToFindDeckCode);

deckCodeWebElement.send_keys(Keys.CONTROL+'a')
time.sleep(1)
deckCodeWebElement.send_keys(Keys.CONTROL+'c')

Затем вставьте:

deckCodeWebElementToPaste = driver.findElement(locatorToFindDeckCodeToPaste);

deckCodeWebElementToPaste.send_keys(Keys.CONTROL+'v')

С другой стороны, я рекомендую сократить ваши XPath до относительной нотации, поскольку используемая вами абсолютная нотация очень хрупкая и ломается очень легко. Вы хотите найти элементы независимо от их расположения в дереве DOM.

Вы можете изменить это:

//*[@id=\\\"react-root\\\"]/div/div/div[2]/div/div[2]/div/div[4]/div[1]/div/textarea

на следующее:

//textarea

Вам может потребоваться запросить что-то вроде идентификатора, класса или имени, если имеется несколько элементов textarea, но нет необходимости начинать с корневого узла и использовать div[2] и div[4] без крайней необходимости.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...