2017-12-11 18 views
0

Pycharm의 Python에서 "Selenium WebDriver"를 사용하고 있는데 드롭 다운에서 클릭하는 요소에 문제가 있습니다. 내가 원하는 것은, "Expiry Month"드롭 다운을 클릭하면 모든 값을 표시하고 "06"을 선택하고 "Expiry Year"드롭 다운에서는 2021 년을 선택해야한다는 것입니다.Python을 사용하여 Selenium의 span 태그에서 "요소를 클릭 할 수 없습니다."

Error 
Traceback (most recent call last): 
    File "/Library/Frameworks/Python.framework/Versions/3.5/lib/python3.5/unittest/case.py", line 58, in testPartExecutor 
    yield 
    File "/Library/Frameworks/Python.framework/Versions/3.5/lib/python3.5/unittest/case.py", line 600, in run 
    testMethod() 
    File "/Users/new/PycharmProjects/Selenium/DropDownWallet.py", line 100, in test_Test1 
    ExpiryYear.click() 
    File "/Library/Frameworks/Python.framework/Versions/3.5/lib/python3.5/site-packages/selenium/webdriver/remote/webelement.py", line 80, in click 
    self._execute(Command.CLICK_ELEMENT) 
    File "/Library/Frameworks/Python.framework/Versions/3.5/lib/python3.5/site-packages/selenium/webdriver/remote/webelement.py", line 501, in _execute 
    return self._parent.execute(command, params) 
    File "/Library/Frameworks/Python.framework/Versions/3.5/lib/python3.5/site-packages/selenium/webdriver/remote/webdriver.py", line 308, in execute 
    self.error_handler.check_response(response) 
    File "/Library/Frameworks/Python.framework/Versions/3.5/lib/python3.5/site-packages/selenium/webdriver/remote/errorhandler.py", line 194, in check_response 
    raise exception_class(message, screen, stacktrace) 
selenium.common.exceptions.WebDriverException: Message: unknown error: Element <span class="jcf-select jcf-unselectable jcf-select-form-control">...</span> is not clickable at point (697, 16). Other element would receive the click: <div class="holder">...</div> 
    (Session info: chrome=62.0.3202.94) 
    (Driver info: chromedriver=2.33.506106 (8a06c39c4582fbfbab6966dbb1c38a9173bfb1a2),platform=Mac OS X 10.13.0 x86_64) 

사람이 나를 도와 주시겠습니까 :

import os 
import time 
import unittest 

from selenium import webdriver 
from selenium.common.exceptions import * 
from selenium.webdriver.common.action_chains import ActionChains 
from selenium.webdriver.common.by import By 
from selenium.webdriver.remote.webelement import WebElement 
from selenium.webdriver.support import expected_conditions as EC 
from selenium.webdriver.support.select import Select 
from selenium.webdriver.support.ui import WebDriverWait 

EmailEntry = "[email protected]" 
password = '12345678' 
Name = "Taimoor" 


class goodswebDropDownMyWallet (unittest.TestCase): 

    def setUp(self): 
     driverlocation = "/Users/new/Documents/Learning/Drivers/selenium-2.53.1/py/selenium/webdriver/chromedriver" 
     os.environ["webdriver.chrome.driver"] = driverlocation 
     self.driver = webdriver.Chrome(driverlocation) 


    def test_Test1(self): 
     driver = self.driver 
     url = "https://bizplace.theentertainerme.com/" 
     driver.get (url) 
     driver.maximize_window () 
     driver.implicitly_wait (10) 
     self.LoginButton = driver.find_element_by_id ("signin") 
     self.LoginButton.click () 

     self.LoginEmail = driver.find_element_by_xpath ("//*[@id='sign_form-default']//div[1]/input[@type='email']") 
     self.LoginEmail.clear () 
     self.LoginEmail.click () 
     self.LoginEmail.send_keys (EmailEntry) 

     self.LoginPassword = driver.find_element_by_xpath (
      "//*[@id='sign_form-default']//div[1]/input[@type='password']") 
     self.LoginPassword.clear () 
     self.LoginPassword.click () 
     self.LoginPassword.send_keys (password) 

     self.LoginSubmitButton = driver.find_element_by_xpath ("//*[@id='sign_form-default']//div[3]/input") 
     self.LoginSubmitButton.click () 
     time.sleep (5) 

     IncorrectEPMessage = driver.find_element_by_xpath ("//*[@id='sign_form-default']/p[2]") 
     if IncorrectEPMessage.is_displayed (): 
      print ("Either Email or Password is incorrect") 
     else: 
      print ("Everything is fine") 

     TitleDropdown = driver.find_element_by_xpath ("//*[@id='user']/li[2]//a") 

     def titleDropDown(): 

      newactions = ActionChains (driver) 
      newactions.move_to_element (TitleDropdown).perform () 
      time.sleep (2) 
      MyProfile = driver.find_element_by_link_text ("Wallet") 
      newactions.move_to_element (MyProfile).perform () 
      time.sleep (3) 
      newactions.move_to_element (MyProfile).click ().perform () 
      time.sleep (5) 
      Wait = WebDriverWait (driver, 10) 

     titleDropDown() 
     Wait = WebDriverWait(driver, 10, poll_frequency=1, 
              ignored_exceptions=[NoSuchElementException, ElementNotVisibleException]) 
     Wait.until(EC.url_changes((By.TAG_NAME, "h2"))) 

     time.sleep (3) 
     NameofHeading = driver.find_element_by_tag_name ("h2") 
     print (NameofHeading.text) 
     time.sleep (3) 
     AddCreditcard = driver.find_element_by_xpath ("//*[@id='add_card']//a") 
     AddCreditcard.click () 

     time.sleep(5) 
     ChangingCardHeader = driver.find_element_by_xpath ("//*[@id='wrapper']/div/div/div/div/div/div/div/div[1]/p") 
     print (ChangingCardHeader.text) 

     CreditCardNumber = driver.find_element_by_id("cardpayment-card_number") 
     CreditCardNumber.send_keys('4543474002249996') 

     newactions2 = ActionChains (driver) 
     ExpiryMonth = driver.find_element_by_xpath("//*[@id='wallet_mobile']/fieldset/div[2]/div[1]/div/div/div/span") 
     ExpiryMonth.click() 
     Month = driver.find_element_by_xpath("/html/body/div[17]/div/span/span/ul/li[7]/span") 
     driver.execute_script("return arguments[0].scrollIntoView();", Month) 
     time.sleep(5) 
     Month.click() 


     ExpiryYear = driver.find_element_by_xpath("//*[@id='wallet_mobile']/fieldset/div[2]/div[2]/div/div/div/span") 
     ExpiryYear.click() 
     Year = driver.find_element_by_xpath("/html/body/div[17]/div/span/span/ul/li[10]/span") 
     driver.execute_script ("return arguments[0].scrollIntoView();", Year) 
     time.sleep(3) 
     Year.click() 

     CVVEntry = driver.find_element_by_id("cardpayment-cvn") 
     CVVEntry.click() 
     CVVEntry.send_keys('956') 

     CardHolderName = driver.find_element_by_id("cardpayment-card_name") 
     CardHolderName.click() 
     CardHolderName.send_keys(Name) 


    def tearDown(self): 
     print ("Wallet is opening") 


if __name__ == "__main__": 
    unittest.main () 

코드를 실행 한 후, 나는 다음과 같은 오류에 직면하고있다?

+0

당신은 모든 잠을 필요가 없습니다 – imox

+0

파이어 폭스 셀레늄 드라이버를 한 번보십시오. Selenium은이를 위해 암시 적 및 명시 적으로 대기하고 있습니다. 요소 위로 마우스를 가져 가야 할 수도 있습니다 (https://stackoverflow.com/questions/17293914/how-to-perform-mouseover-function-in-selenium-webdriver- using-java)를 클릭하십시오. – lloyd

+0

[Selenium Web Driver & Java]가 중복 될 수 있습니다. 포인트 (36, 72)에서 요소를 클릭 할 수 없습니다. 다른 요소는 클릭을 받게됩니다.] (https://stackoverflow.com/questions/44912203/selenium-web-driver-java-element-is-not-clickable-at-point-36-72-other-el) – DebanjanB

답변

0

셀렌의 execute_script를 사용해 볼 수 있습니다.

변경

ExpiryYear.click() 

driver.execute_script('arguments[0].click();', ExpiryYear) 
+0

나는 둘 다 시도했다. ExpiryYear.click()이 드롭 다운을 열 때 .. 과 execute_script가 이미 사용되었으므로 둘 다 헛되이 있습니다. ( – TeSter